package exception02;

import java.io.IOException;
import java.util.zip.DataFormatException;

/*
try...catch注意事项：
   1.如果多个catch中的异常类型没有父子关系，那么多个catch的顺序不影响最终结果
   2.如果多个catch中的异常又父子类型，那么父类型的catch不能放在子类型的上面
     因为无论子类型异常对象，还是父类型异常对象都会被父类型的catch捕获，那么在父类型catch下面的子类型catch将永远执行不到
    解决方案：
       将子类型catch放在父类型的catch上方
 */
public class ExceptionDemo07 {
    public static void main(String[] args) {
        //method01();
        try {
            //method(0);
            method(2);
        } catch (IOException e) {
            System.out.println("捕获了IOEexception");

        } catch (Exception e) {// method(0)抛出new IOException(),我们也可以被catch(Exception e)捕获

            System.out.println("捕获了DataFormatException");//DataFormatException e = new IOEexception
        }

    }

    public static void method(int a) throws IOException, Exception {
        if (a == 0) {
            //抛出一个编译时异常
            throw new IOException();
        }
        if (a == 2) {
            //throw new DataFormatException();
            throw new Exception();
        }
    }

    private static void method01() {
/*        try {
            //method(0);
            method(2);
        } catch (Exception e) {// method(0)抛出new IOException(),我们也可以被catch(Exception e)捕获
                               //相当于 Exception e = new IOException();  多态
                               //method(2) 抛出new Exception，也被catch(Exception e)捕获
                               //相当于 Exception e = new Exception();  多态
            System.out.println("捕获了DataFormatException");//DataFormatException e = new IOEexception
        }catch (IOException e) {
            System.out.println("捕获了IOEexception");
        }*/
    }


}
